Tips&Tricks I trucchi del mestiere

 

Una rappresentazione grafica per i nostri dati


Alcune applicazioni necessitano, dopo aver elaborato un certo numero e tipo di dati, di mostrare i risultati ottenuti con l'ausilio di controlli ad alto impatto visivo come i grafici. Esistono numerosi controlli di terze parti che offrono la possibilità di risolvere questo problema, ma con le possibilità che il Framework .NET ci offre, è possibile creare questi controlli personalmente.
La procedura allegata, sviluppata in Visual Basic .NET permette la creazione di un controllo per la creazione di semplici grafici, con la possibilità di inserire etichette per ogni punto del grafico, scelta dei colori delle linee, zoom in/out, etc...
Il codice, data la sua prolissità, è presente nel cd-rom allegato alla rivista e/o sul sito web di ioProgrammo (www.ioprogrammo.it)
Tip fornito dal sig. P.Libro



Come inviare un FAX dal proprio PC


Il codice permette di implementare in una propria applicazione l’invio di documenti es. Word, PDF, Excel (..tutti i documenti stampabili) via fax usando i Fax Services nativi di Windows 2000.
Per funzionare ovviamente occorre che sul PC/Server sia installato Microsoft Fax (viene installato automaticamente quando si installa un modem sul sistema) e che dunque esista la stampante Fax e nessun altro software aggiuntivo o a pagamento. Nell’esempio e’ compreso anche un banale form che permette di specificare il numero del destinatario, il nome del file documento da allegare (*.doc,*.pdf) e l’eventuale cover da allegare.
Tale cover page deve essere realizzata con l’apposito cover designer fornito da Microsoft (Start->Impostazioni->Pannello di controllo->Fax->folder “Frontespizi” ->Nuovo).
Il codice è presente in formato sorgente nel cd-rom allegato alla rivista e/o sul sito web di ioProgrammo (www.ioprogrammo.it)(www.ioprogrammo.it)
Tip fornito dal sig. S.Aleotti

Option Explicit

Private Const OF_EXIST = &H4000

Private Const OFS_MAXPATHNAME = 128
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const HFILE_ERROR = (-1)

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long
Private Type OFSTRUCT
        cBytes As Byte
        fFixedDisk As Byte
        nErrCode As Integer
        Reserved1 As Integer
        Reserved2 As Integer
        szPathName(OFS_MAXPATHNAME) As Byte
End Type

Public Function FileExists(Path As String) As Boolean
Dim o As OFSTRUCT
Dim i As Integer

o.cBytes = Len(o)

i = OpenFile(Path, o, OF_EXIST)

If (i > HFILE_ERROR) Then
    FileExists = True
Else
    FileExists = (Err.LastDllError <> ERROR_FILE_NOT_FOUND)
End If
Err.Clear
End Function
Public Sub DisabilitaControlli(value As Boolean)
Dim c As Control
    Frame1.Enabled = value
    For Each c In FormMain.Controls
    
    On Error Resume Next
    If (c.Container.Name = Frame1.Name) Then c.Enabled = value
    Err.Clear
    Next
End Sub
Function ComputerName() As String
    Dim buffer As String * 512, length As Long
    length = Len(buffer)
    If GetComputerName(buffer, length) Then
        ComputerName = Left$(buffer, length)
    End If
End Function

Private Sub CHK_COVER_Click()
Dim i As Integer
Dim c As Control

If (CHK_COVER.value = 1) Then
    DisabilitaControlli True
Else
    DisabilitaControlli False
End If
End Sub

Private Sub Command1_Click()

    Dim objFaxServer As Object
    Dim objFaxDoc As Object
    On Error GoTo ErrTrap

    If (RTrim(TXT_SERVER.Text) <= "") Then
        MsgBox "Specificare il server", vbCritical Or vbOKOnly, Caption
        TXT_SERVER.SetFocus
        Exit Sub
    End If
    If (RTrim(TXT_FILE.Text) <= "" Or Not FileExists(TXT_FILE.Text)) Then
        MsgBox "Specificare il nome dell'alegato (Pdf/Word)", vbCritical Or vbOKOnly, Caption
        TXT_FILE.SetFocus
        Exit Sub
    End If
    
    If (RTrim(TXT_NUMERO.Text) <= "") Then
        MsgBox "Specificare il numero telefono", vbCritical Or vbOKOnly, Caption
        TXT_NUMERO.SetFocus
        Exit Sub
    End If
    
    If (CHK_COVER.value = 1) Then
        If (RTrim(TXT_COVER.Text) <= "" Or Not FileExists(TXT_COVER.Text)) Then
            MsgBox "Specificare una cover", vbCritical Or vbOKOnly, Caption
            TXT_COVER.SetFocus
            Exit Sub
        End If
    End If

    Set objFaxServer = CreateObject("FaxServer.FaxServer")
    objFaxServer.Connect (TXT_SERVER.Text)
    Set objFaxDoc = objFaxServer.CreateDocument(TXT_FILE.Text)
    
    objFaxDoc.FaxNumber = TXT_NUMERO.Text
    objFaxDoc.RecipientName = TXT_DESTINATARIO.Text
    
    If (CHK_COVER.value = 1) Then
        objFaxDoc.SendCoverPage = 1
        objFaxDoc.CoverPageName = TXT_COVER.Text
        objFaxDoc.CoverPAgeSubject = TXT_OGGETTO.Text
        objFaxDoc.CoverPageNote = TXT_NOTE.Text
    End If
    objFaxDoc.Send
       
    Set objFaxDoc = Nothing
    
    objFaxServer.Disconnect
    
    Set objFaxServer = Nothing
Exit Sub
ErrTrap:
    Select Case MsgBox("Errore:(" & Err.Number & ")" & Err.Description, vbAbortRetryIgnore Or vbCritical, Caption)
        Case vbRetry
            Resume
        Case vbAbort
            If (Not objFaxDoc Is Nothing) Then Set objFaxDoc = Nothing
            If (Not objFaxServer Is Nothing) Then Set objFaxServer = Nothing
            Exit Sub
        Case vbIgnore
            Resume Next
    End Select

End Sub

Private Sub Command3_Click()
CommonDialog.Filter = "Documenti Word|*.doc|Acrobat reader|*.pdf"
CommonDialog.ShowOpen
TXT_FILE.Text = CommonDialog.FileName
End Sub

Private Sub Command2_Click()
CommonDialog.Filter = "Cover Pages|*.cov"
CommonDialog.ShowOpen
TXT_COVER.Text = CommonDialog.FileName

End Sub

Private Sub Form_Load()

TXT_SERVER.Text = GetSetting(App.EXEName, "INPUT", "SERVER")
If (RTrim(TXT_SERVER.Text) <= "") Then
    TXT_SERVER.Text = ComputerName
End If
TXT_FILE.Text = GetSetting(App.EXEName, "INPUT", "FILE")
TXT_NUMERO.Text = GetSetting(App.EXEName, "INPUT", "NUMERO")
CHK_COVER.value = 0
DisabilitaControlli False
End Sub

Private Sub Form_Unload(Cancel As Integer)
    
    SaveSetting App.EXEName, "INPUT", "SERVER", TXT_SERVER.Text
    SaveSetting App.EXEName, "INPUT", "FILE", TXT_FILE.Text
        SaveSetting App.EXEName, "INPUT", "NUMERO", TXT_NUMERO.Text

End Sub


Manipolare un documento Word da Visual Basic


Codice utile per aprire o creare un modello di Word da Visual Basic e inserirvi del testo passato dall’applicazione VB. Anzitutto è necessario creare un file modello chiamandolo appunto modello.dot e creare all'interno di esso 4 bookmark di nome a,b,c,d. Creare poi in vb un form con tre campi di testo e 6 pulsanti ed incollare il codice seguente.
Tip fornito dal sig. C.Calabrò


Private Sub Command1_Click() On Error GoTo Errore 'definisce che oggetto è objWord (in questo caso è una nuova applicazione Word) Dim objWord As Word.Application 'definisce che oggetto è objDoc (in questo caso è un nuovo documento Word) Dim objDoc As Word.Document 'ora che objWord è dichiarato si vuole effettivamente 'aprire questa nuova applicazione Word Set objWord = New Word.Application 'ora che objDoc è dichiarato si vuole effettivamente 'aprire questo nuovo documento Set objDoc = objWord.Documents.Add(app.path & "\Modello.dot") 'si rende visibile Word objWord.Visible = True 'rende attivo il documento appena creato objDoc.Activate objDoc.Save Errore: MsgBox "Il salvataggio è necessario", vbExclamation, "Cristiano Calabrò" End Sub Private Sub Command2_Click() Dim objWord As Word.Application Dim objDoc As Word.Document Set objWord = New Word.Application Set objDoc = objWord.Documents.Add(App.Path & "\Modello.dot") objWord.Visible = True objDoc.Activate objDoc.Bookmarks("a").Range = Text1.Text objDoc.Bookmarks("b").Range = Text2.Text objDoc.Bookmarks("c").Range = Text3.Text objDoc.Bookmarks("d").Range = Date & " - Segnalibro d" objDoc.PrintPreview End Sub Private Sub Command4_Click() Dim objWord As Word.Application Dim objDoc As Word.Document Set objWord = New Word.Application Set objDoc = objWord.Documents.Add(App.Path & "\Modello.dot") objWord.Visible = True objDoc.Activate objDoc.PrintOut objWord.Quit (False) End Sub Private Sub Command5_Click() Dim objWord As Word.Application Dim objDoc As Word.Document Set objWord = New Word.Application Set objDoc = objWord.Documents.Add objWord.Visible = True objDoc.Activate objDoc.Save End Sub Private Sub Doc_Click() Dim objWord As Word.Application Dim objDoc As Word.Document Set objWord = New Word.Application Set objDoc = objWord.Documents.Add objWord.Visible = True objDoc.Activate End Sub Private Sub Form_Load() Text1.Text = "Segnalibro a" Text2.Text = "Segnalibro b" Text3.Text = "Segnalibro c" End Sub Private Sub Mod_Click() Dim objWord As Word.Application Dim objDoc As Word.Document Set objWord = New Word.Application Set objDoc = objWord.Documents.Open(App.Path & "\Modello.dot") objWord.Visible = True objDoc.Activate End Sub